Reference
- 문제 출처 - HackerRank
- 파이썬 연습 - Practice - Python
개인적인 생각과 상상으로 작성한 내용들이 포함되어 있습니다
문제를 풀고 Discussion Tab을 참고하며 코드 스타일을 개선하려고 노력하고자 합니다
HackerRank
Sets
기본 개념
MUTATIONS
집합의 변환(mutation)은 update()
함수가 기본이고,intersection_update()
, difference_update()
, symmetric_difference_update()
기능도 제공함
각 함수는 기호로도 표현 가능하다
update()
:|=
intersection_update()
:&=
difference_update()
:-=
symmetric_difference_update()
:^=
대표로 update()
함수의 예제만 살펴보겠다
|
Set Mutations
문제 : 집합 A가 있을 때, N번의 변환을 거쳐서 최종 집합 A를 구하는 문제
입력 : 집합 A의 크기; 집합 A의 원소들; 변환 횟수 N; (2*N번 반복)operation 이름과 집합 n의 원소 수;
출력 : 최종 집합 A 원소들의 합
16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 24 52
4
intersection_update 10
2 3 5 6 8 9 1 4 7 11
update 2
55 66
symmetric_difference_update 5
22 7 35 62 58
difference_update 7
11 22 35 55 58 62 66
38
eval()
함수를 사용한 방법
if **name** == '**main**': |
getattr()
함수를 사용한 방법, 입력 받을 때 tuple 형식으로 받는 것도 인상적
if **name** == '**main**': |
The Captain’s Room
문제 : 호텔의 방문객으로 몇몇 그룹의 관광객들과 캡틴(captain) 한명이 있을 때, 캡틴이 누구인지 찾는 문제
입력 : 관광객 그룹의 크기 K; 각 관광객들의 방 번호;
출력 : 캡틴의 방 번호
collections 모듈에서 .Counter()
함수를 사용해봤다
import collections |
수학적으로 계산한 방법
예제의 경우 대충 (8+8+8+8)//4 요론 느낌? 짧아서 읽으면 이해가 된다
k,arr = int(input()),list(map(int, input().split())) |
Check Subset
문제 : 집합 A, B가 주어졌을 때 A가 B의 부분집합인지 확인하는 문제
입력 : 테스트케이스 수 T; {(T번 반복) 집합A 원소 수; 집합A의 원소들; 집합B 원소 수; 집합B의 원소들;}
출력 : True/False로 출력
if **name** == '**main**': |
Check Strict Superset
문제 : n개의 집합들이 집합 A의 진부분 집합인지 확인하는 문제
입력 : 집합 A의 원소들; 비교할 집합의 수 n; (n번 반복) 비교할 집합의 원소들;
출력 : True/False로 출력
예제 : {1 2 3 4 5}는 진부분 집합이 맞지만 {100 11 12}는 아니므로 답은 False
if **name** == '**main**': |
- 2줄만에 끝내다니…
a = set(input().split()) |